// Copyright (C) 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: Relational comparison of BigInt and string values
esid: sec-abstract-relational-comparison
features: [BigInt]
---*/
function Test() {
    assert.sameValue(0n >= '0', true, 'The result of (0n >= "0") is true');
    assert.sameValue('0' >= 0n, true, 'The result of ("0" >= 0n) is true');
    assert.sameValue(0n >= '1', false, 'The result of (0n >= "1") is false');
    assert.sameValue('0' >= 1n, false, 'The result of ("0" >= 1n) is false');
    assert.sameValue(1n >= '0', true, 'The result of (1n >= "0") is true');
    assert.sameValue('1' >= 0n, true, 'The result of ("1" >= 0n) is true');
    assert.sameValue(0n >= '', true, 'The result of (0n >= "") is true');
    assert.sameValue('' >= 0n, true, 'The result of ("" >= 0n) is true');
    assert.sameValue(0n >= '1', false, 'The result of (0n >= "1") is false');
    assert.sameValue('' >= 1n, false, 'The result of ("" >= 1n) is false');
    assert.sameValue(1n >= '', true, 'The result of (1n >= "") is true');
    assert.sameValue('1' >= 0n, true, 'The result of ("1" >= 0n) is true');
    assert.sameValue(1n >= '1', true, 'The result of (1n >= "1") is true');
    assert.sameValue('1' >= 1n, true, 'The result of ("1" >= 1n) is true');
    assert.sameValue(1n >= '-1', true, 'The result of (1n >= "-1") is true');
    assert.sameValue('1' >= -1n, true, 'The result of ("1" >= -1n) is true');
    assert.sameValue(-1n >= '1', false, 'The result of (-1n >= "1") is false');
    assert.sameValue('-1' >= 1n, false, 'The result of ("-1" >= 1n) is false');
    assert.sameValue(-1n >= '-1', true, 'The result of (-1n >= "-1") is true');
    assert.sameValue('-1' >= -1n, true, 'The result of ("-1" >= -1n) is true');

    assert.sameValue(
      9007199254740993n >= '9007199254740992',
      true,
      'The result of (9007199254740993n >= "9007199254740992") is true'
    );

    assert.sameValue(
      '9007199254740993' >= 9007199254740992n,
      true,
      'The result of ("9007199254740993" >= 9007199254740992n) is true'
    );

    assert.sameValue(
      -9007199254740992n >= '-9007199254740993',
      true,
      'The result of (-9007199254740992n >= "-9007199254740993") is true'
    );

    assert.sameValue(
      '-9007199254740992' >= -9007199254740993n,
      true,
      'The result of ("-9007199254740992" >= -9007199254740993n) is true'
    );
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}
